package fiuba.algo3;

import java.util.ArrayList;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;

public class Caso {
	private Ladron ladron;
	private ObjetoRobado objetoRobado;
	private ArrayList<Ciudad> rutaDeEscape;

	public Caso(ObjetoRobado.Valor valorObjeto) {
		this.objetoRobado = new ObjetoRobado(valorObjeto);
		this.ladron = new Ladron(this.objetoRobado);
		this.rutaDeEscape = this.ladron.getRutaDeEscape();
	}
	
	public Caso() {}
	
	public Node serializar(Document doc) {
		Element elementoCaso = doc.createElement("CasoActual");
		elementoCaso.appendChild(this.objetoRobado.serializar(doc));
		Element elementoRutaDeEscape = doc.createElement("RutaDeEscape");
		elementoCaso.appendChild(elementoRutaDeEscape);
		for (Ciudad ciudad : this.rutaDeEscape) {
			elementoRutaDeEscape.appendChild( ciudad.serializar(doc) );
		}
		return elementoCaso;
	}
	
	public static Caso hidratar(Node elementoCaso) {
		Caso nuevoCaso = new Caso();
		nuevoCaso.objetoRobado = ObjetoRobado.hidratar( ((Element) elementoCaso).getElementsByTagName("ObjetoRobado").item(0) );
		ArrayList<Ciudad> rutaDeEscape = new ArrayList<Ciudad>();
		Element elementoRutaDeEscape =  (Element) ((Element) elementoCaso).getElementsByTagName("RutaDeEscape").item(0);
		for(int i=0; i< elementoRutaDeEscape.getChildNodes().getLength(); i++) {
			Ciudad ciudad = Ciudad.hidratar(elementoRutaDeEscape.getChildNodes().item(i));
			rutaDeEscape.add(ciudad);
		}
		nuevoCaso.rutaDeEscape = rutaDeEscape;
		return nuevoCaso;
	}
		
	public ObjetoRobado getObjetoRobado() {
		return this.objetoRobado;
	}

	public Ladron getLadron() {
		return this.ladron;
	}

	public Ciudad getCiudadInicial() {
   		return this.rutaDeEscape.get(0);
	}
		
}